/***************************************************************
*  Copyright (c) 2007 by GroupMe! Team (www.groupme.net)
*  All rights reserved.
*
*  This file is part of the GroupMe! Project. Source code of 
*  this project is closed and redistribution of this code is
*  prohibited. 
*  
*  Contact: http://www.groupme.net
*
*  This copyright notice MUST APPEAR in all copies of the file!
***************************************************************/
package net.groupme.search.strategy;

import java.util.List;

import net.groupme.model.Resource;
import net.groupme.search.strategy.model.RankingPreferences;
import net.groupme.search.strategy.model.WeightedResource;
import net.groupme.search.strategy.model.WeightedTag;
import net.groupme.search.strategy.model.WeightedUser;

/**
 * created on 10 Jan 2008
 * 
 * This class/interface...
 * 
 * @author Fabian Abel, <a href="mailto:abel@l3s.de">abel@l3s.de</a>
 * @author last edited by: $Author: fabian $
 * 
 * @version $Revision: 1.3 $ $Date: 2008-01-17 02:58:58 $
 */
public interface RankingStrategy {
	
	/** human readable name of the strategy */
	public abstract String getName();
	
	/** human readable description of the strategy */
	public abstract String getDescription();

	/**
	 * This method returns a ranking of resources. This ranking respects the given preferences.
	 * First item in the returned list is the most relevant resource.
	 * @param preferences the preferences to take into account
	 * @return a ranking of resources, which respects the given preferences.
	 */
	public abstract List<WeightedResource> rankResources(RankingPreferences preferences);
	
	/**
	 * This method returns a ranking of tags. This ranking respects the given preferences.
	 * First item in the returned list is the most relevant tag.
	 * @param preferences the preferences to take into account
	 * @return a ranking of tags, which respects the given preferences.
	 */
	public abstract List<WeightedTag> rankTags(RankingPreferences preferences);
	
	/**
	 * This method returns a ranking of users. This ranking respects the given preferences.
	 * First item in the returned list is the most relevant user.
	 * @param preferences the preferences to take into account
	 * @return a ranking of users, which respects the given preferences.
	 */
	public abstract List<WeightedUser> rankUsers(RankingPreferences preferences);
}
